package edu.ccut.saturn.studio.database.adapters;

import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

import edu.ccut.saturn.studio.database.model.DBConnection;

/**
 * 数据适配器接口
 * 
 * @author 谷钰
 * @version 1.0 2008.12.02
 * 
 */

public interface IDatabaseAdapter {
	
	/**
	 * 过滤表名
	 * 
	 * @param schemaName
	 * 		  实例名
	 * @param tableName
	 * 		  表名
	 * @return 表名 
	 * 
	 */
	
	public abstract String filterTableName(String schemaName, String tableName);

	/**
	 * 获得列名、数据类型、长度
	 * 
	 * @param metaData
	 * 		  元数据，用来获得数据库类型
	 * @param catalog
	 * 		  目录
	 * @param schemaPattern
	 * 	      实例名
	 * @param tableNamePattern
	 *        表名
	 * @param columnNamePattern
	 * 		  列名
	 * @return 列名、数据类型、长度 
	 * @throws SQLException
	 * 
	 */
	
	public abstract ResultSet getColumns(DatabaseMetaData metaData,
			String catalog, String schemaPattern, String tableNamePattern,
			String columnNamePattern) throws SQLException;

	/**
	 * 获得主键
	 * 
	 * @param metaData
	 * 		  元数据，用来获得数据库类型
	 * @param catalog
	 * 	      目录
	 * @param schema
	 * 		  实例名
	 * @param tableName
	 * 	      表名
	 * @return 主键
	 * @throws SQLException
	 * 
	 */
	
	public abstract ResultSet getPrimerKey(DatabaseMetaData metaData,
			String catalog, String schema, String tableName)
			throws SQLException;

	/**
	 * 获得数据库的实例：Oracle获得的是用户，MySOL获得的是数据库 
	 * 
	 * @param metaData
	 * 		  元数据，用来获得数据库类型
	 * @param schemaRts
	 * 		  结果集
	 * @param schemaNames
	 * 		  实例集合
	 * @return 实例集合
	 * @throws Exception
	 * 
	 */
	
	public abstract List<String> getSchemas(DatabaseMetaData metaData,
			ResultSet schemaRts, List<String> schemaNames) throws Exception;

	/**
	 * 将数据库中的表和视图分别放在各自的文件夹中
	 * 
	 * @param metaData
	 * 		  元数据，用来获得数据库类型
	 * @param catalog
	 * 		  目录
	 * @param schemaPattern
	 * 		  实例名
	 * @param tableNamePattern
	 * 		  表名
	 * @param type
	 * 		  类型，包含表和视图
	 * @param resultSet
	 * 		  结果集
	 * @return 表和视图的集合
	 * @throws SQLException
	 * 
	 */
	
	public abstract List<String> getTables(DatabaseMetaData metaData, String catalog,
			String schemaPattern, String tableNamePattern, String type,
			ResultSet resultSet) throws SQLException;

	public abstract String getDatabaseName(DBConnection connection);

}
